from django.db import models


class Book(models.Model):
    """ 书本 """
    # 一般标题为不可空，如果非要可空，__str__方法就要修改如下
    # 在开发当中最好加上verbose_name字段备注，如果比较模糊的字段，可以通过help_text字段加以说明，以便日后回忆
    title = models.CharField(verbose_name="标题", max_length=255, null=True, blank=True)
    category = models.ForeignKey('Category', on_delete=models.CASCADE, verbose_name="分类")
    author = models.ForeignKey('Author', on_delete=models.CASCADE, verbose_name="作者")
    owned = models.IntegerField()
    # 价格相关使用FloatField类型时，计算过程中可能会存在精度问题，这里我习惯使用IntegerField，单位为分。或者有更好的解决方案
    price = models.FloatField()
    publish_date = models.DateField()

    def __str__(self):
        # 如果title为可空 必须判断title是否为None，返回类型应为str类型，否则至少admin会报错
        return self.title or ""

    class Mate:
        verbose_name = "书本"
        verbose_name_plural = verbose_name


class Author(models.Model):
    """ 作者 """

    name = models.CharField(max_length=255, null=True, blank=True)

    def __str__(self):
        return self.name or "无名作者"


class Category(models.Model):
    """ 类别 """
    title = models.CharField(max_length=100, null=True, blank=True)

    def __str__(self):
        return self.title or "无名分类"
